package com.example.k8s.hello.common.exception;

import org.apache.commons.lang3.StringUtils;

/**
 * 错误码，参考Java开发手册泰山版
 */
public enum ApiExEnum implements ExAssertI {

    // 登录错误
    A0001("账号或密码错误"),
    A0002("当前未登录"),
    A0003("用户不存在"),
    A0004("未能读取到有效Token"),
    A0005("Token无效"),
    A0006("账号无此权限"),
    A0007("验证码错误或失效"),

    // 通用业务异常
    A0010("参数不正确"),
    A0011("数据级联无法删除"),
    A0012("数据已存在,无法重复添加"),
    A0013("非法操作"),

    // 通用数据异常
    A0030("json解析异常"),

    // 消息处理
    A0040("消息格式不正确"),

    // auth2.0
    A0050("oauth2账号或密码错误"),
    A0051("oauth2 redirectUri错误"),
    A0052("oauth2 scope不存在"),
    A0053("oauth2 code错误"),

    // 设备
    A0060("设备状态异常"),

    // oss
    A0100("oss 桶不存在"),
    A0101("oss 文件不存在"),

    // 系统错误
    B0001("系统执行出错"),
    B0002("文件处理出错"),
    B0003("系统数据出错"),
    B0004("包调用出错"),

    /**
     * 调用服务出错
     */
    C0001("调用服务出错"),
    C0002("服务授权规则不通过"),
    C0003("服务返回值不正确"),

    ;

    public String summary;

    ApiExEnum(String summary) {
        this.summary = summary;
    }

    @Override
    public BizException newException(String message) {
        return new BizException(this.name(), msg(message));
    }

    @Override
    public BizException newException(Throwable t, String message) {
        return new BizException(this.name(), msg(message), t);
    }

    public String msg(String message) {
        return StringUtils.isNoneBlank(message) ? message : this.summary;
    }
}
